package com.jinzhi.jzapi.certificate.filter;

import com.jinzhi.common.configconsts.wxconsts.LinkConfiggure;
import com.jinzhi.common.utils.ApiResult;
import com.jinzhi.common.vo.WxPayVo;
import com.jinzhi.jzweb.domain.CapitalFlowDO;
import com.jinzhi.jzweb.service.CapitalFlowService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.chain.Command;
import org.apache.commons.chain.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 保存下单记录,添加资金流水
 */
@Slf4j
@Component
public class WxFocusOnFilter implements Command {

	@Autowired
	private CapitalFlowService capitalFlowService;

	private static BigDecimal bigDecimal;

	static {
		bigDecimal = new BigDecimal(100);
	}

	@Override
	public boolean execute(Context context) throws Exception {

		log.info("链路:微信支付执行到:保存下单记录");

		//获取支付对象
		WxPayVo wxPayVo = (WxPayVo) context.get(LinkConfiggure.WX_PAY_VO);

		//获取返回对象
		ApiResult apiResult = (ApiResult) context.get(LinkConfiggure.API_RESULT);

		try {
			Long orderId = (Long) context.get("orderId");
			Long userId = (Long) context.get("user_id");
			CapitalFlowDO capitalFlowDO1 = capitalFlowService.findOneByKv("order_id",orderId);
			if(capitalFlowDO1 == null) {
				//下单成功，创建资金流水记录
				CapitalFlowDO capitalFlowDO = new CapitalFlowDO();
				capitalFlowDO.setUserId(userId);//用户id
				capitalFlowDO.setOrderId(orderId);//订单
				capitalFlowDO.setMoney(new BigDecimal(wxPayVo.getTotal_fee()).
						divide(bigDecimal, 2, RoundingMode.HALF_UP));//订单金额
				capitalFlowDO.setPayType(0);//支付方式（0微信支付，1支付宝支付，2余额支付）
				capitalFlowDO.setType(3);//交易类型（0课程、1报名、2招聘置顶，3关注简历）
				capitalFlowDO.setUserType(0);//用户类型(0企业用户，1个人用户）
				capitalFlowDO.setSigns(1);//流水标记（1收入，2支出）
				capitalFlowDO.setState(2);//有效状态（0成功，1失败，2待确认，9已删除）
				capitalFlowDO.setMethod("POST");//请求方法
				capitalFlowService.insert(capitalFlowDO);
			}
		}catch (Exception e){
			apiResult.setCode(LinkConfiggure.WX_ERROR_CODE);
			apiResult.setMsg("微信下单失败");
			return true;
		}

		return false;
	}
}
